Resource allocation for a plurality of initiator devices accessing a plurality of recipient devices in, for example, distributed shared memory needs to be carefully managed to ensure forward progress of each type of transaction request. This has been done in a variety of ways, but generally by the use of implicit or explicit resource allocation.
Implicit resource allocation has been done using acknowledgement signals sent from the recipient device and indicating to the initiator device whether the transaction request has been accepted or not. If it has not been accepted then the initiator device will reissue the transaction request later in the hope that this time it will be accepted.
A disadvantage of this is that it is difficult to bound the latency for each transaction request as one can continually try and not succeed. Furthermore, the continual trying has an overhead of time, power and bandwidth associated with it.
An alternative system is one where at start up for example, each initiator device is given a certain number of credits for transactions with a recipient device and as a credit is used, a new one is issued once the transaction request that used it has completed. A drawback of this is that as systems become larger, in order to provide all initiators with credits for each recipient, the buffers for storing pending transactions on the recipients need to become larger and larger.
It would be desirable to be able to dynamically allocate resources in such a way that efficient use is made of the transaction request storage and yet latency of individual transaction requests is kept low.